<?php


namespace app\common\middleware;


use app\admin\model\Manager;

class checkManagerToken
{
    public function handle($request, \Closure $next)
    {
        // 获取用户头信息
        $param = $request->header();
        //不含token
        if(!array_key_exists('token',$param)) TApiException('非法token,禁止操作',20003,200);
        //当前用户的token是否存在
        $token = $param['token'];
        $user = \Cache::get($token);
        //验证失败(为登录或者以过期)
        if(!$user) TApiException('非法token，请先登录',20003,200);
        $request->UserModel = Manager::find($user['id']);
        // 当前用户已被禁用
        if(!$user['status']){
            return ApiException('当前用户已被禁用');
        }

        // 当前用户数据
        $request->userInfo = $user;
        // 验证当前用户权限(超级管理员无需验证)
        if(!$request->UserModel->super){
            if (!$request->UserModel->role->status) {
                return ApiException('你所在角色组已被禁用');
            }
            $ruleName = $request->rule()->getName();
            $r = (new Manager())->hasRule($request->UserModel,$ruleName,$request->method());
            if(!$r){
                return ApiException('你没有权限');
            }
        }

        return $next($request);
    }
}